-- 顶部文件名标题
-- 使用示例  :e lua/plugins/
-- ~/.config/nvim/lua/plugins/bufferline.lua
return {
	"akinsho/bufferline.nvim",
	url = "git@github.com:akinsho/bufferline.nvim.git",
	version = "*", -- 使用最新稳定版
	dependencies = {
		"nvim-tree/nvim-web-devicons", -- 文件类型图标支持
	},

	config = function()
		-- 启用真彩色（必须）
		vim.opt.termguicolors = true

		-- 主配置
		require("bufferline").setup({
			options = {
				-- 基础设置
				mode = "buffers", -- 可选 "buffers" | "tabs"
				numbers = "none", -- 显示序号 ("none" | "ordinal" | "buffer_id")
				close_command = "bdelete! %d", -- 关闭命令
				right_mouse_command = "bdelete! %d", -- 右键关闭
				left_mouse_command = "buffer %d", -- 左键切换
				middle_mouse_command = nil, -- 中键动作

				-- 只显示文件名（去掉路径）
				name_formatter = function(buf)
					return vim.fn.fnamemodify(buf.name, ":t")
				end,

				-- 外观
				separator_style = "slant", -- 分隔线样式 ("slant" | "thick" | "thin" | { 'any', 'any' })
				indicator = {
					icon = "▎", -- 当前缓冲区指示符
					style = "icon", -- 可选 "icon" | "underline" | "none"
				},
				show_buffer_icons = true, -- 显示文件类型图标
				show_buffer_close_icons = false, -- 隐藏关闭按钮
				show_close_icon = false,
				show_tab_indicators = true,
				enforce_regular_tabs = false,

				-- 排序
				sort_by = "insert_after_current", -- 排序方式 ("id" | "extension" | "directory" | "insert_after_current")
				move_wraps_at_ends = true, -- 循环切换

				-- 颜色配置（可配合 colorscheme 调整）
				highlights = require("catppuccin.groups.integrations.bufferline").get(),
			},
		})

		-- 快捷键配置
		local map = vim.keymap.set
		local opts = { noremap = true, silent = true }

		-- 自动隐藏标题栏
		-- 检查是否已加载 bufferline
		if not package.loaded["bufferline"] then
			vim.notify("bufferline.nvim 未加载，标题栏功能可能受限", vim.log.levels.WARN)
		end

		local function setup_tabline()
			-- 自动隐藏标题栏（当只有一个缓冲区时隐藏）
			vim.api.nvim_create_autocmd({ "BufEnter", "BufDelete" }, {
				group = vim.api.nvim_create_augroup("AutoTabline", { clear = true }),
				callback = function()
					local buf_info = vim.fn.getbufinfo({ buflisted = 1 })
					local buf_count = #buf_info
					-- 至少保留2个缓冲区或存在修改中的缓冲区时显示标题栏
					local show_tabline = buf_count > 1 or (buf_count == 1 and buf_info[1].changed == 1)
					vim.opt.showtabline = show_tabline and 2 or 0
				end,
			})

			-- 带状态提示的切换快捷键
			vim.keymap.set("n", "<leader>bh", function()
				local new_state = vim.opt.showtabline:get() == 0 and 2 or 0
				vim.opt.showtabline = new_state
				-- vim.notify(
				-- 	string.format("标题栏 %s", new_state == 2 and "显示" or "隐藏"),
				-- 	vim.log.levels.INFO,
				-- 	{ title = "UI 状态" }
				-- )
			end, { desc = "切换标题栏显示" })

			-- 顶部间距设置（适配不同终端）
			vim.opt.winbar = " "
			vim.api.nvim_create_autocmd("ColorScheme", {
				callback = function()
					-- 确保winbar在主题更改后保持可见
					vim.cmd("highlight WinBar guibg=NONE guifg=Gray")
				end,
			})
		end

		-- 安全执行配置
		pcall(setup_tabline)

		-- 缓冲区导航
		map("n", "<Tab>", "<Cmd>BufferLineCycleNext<CR>", opts)
		map("n", "<S-Tab>", "<Cmd>BufferLineCyclePrev<CR>", opts)
		map("n", "<leader>bp", "<Cmd>BufferLinePick<CR>", {
			noremap = true,
			silent = true,
			desc = "选择缓冲区",
		})

		-- 新增关闭缓冲区快捷键 (3种方式)
		-- 1. 常规关闭 (类似Vim的 :bd)
		map("n", "<leader>bc", "<Cmd>bdelete<CR>", { desc = "关闭当前缓冲区" })

		-- 2. 强制关闭 (类似Vim的 :bd!)
		map("n", "<leader>bC", "<Cmd>bdelete!<CR>", { desc = "强制关闭缓冲区" })

		-- 3. 关闭其他所有缓冲区 (保留当前)
		map("n", "<leader>bo", "<Cmd>BufferLineCloseOthers<CR>", {
			desc = "关闭其他所有缓冲区",
		})

		-- 4. 通过bufferline接口关闭
		map("n", "<leader>bx", "<Cmd>BufferLinePickClose<CR>", {
			desc = "选择并关闭缓冲区",
		})
	end,
}
